package com.csx.base.meta;

import lombok.Data;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/***
 *  列类
 *  @author Robin.Wang
 *  @date	2020-05-28
 * */
@Data
public class OdsColumn {
	public static final Pattern COLOUMN_TYPE_PATTERN=Pattern.compile("(^[A-Za-z]+)\\((\\d+)(,?)((\\d?))\\)$");
	/**
	 * 字段名
	 * */
	private String columnName;
	/**
	 * 原始位置（顺序）
	 * */
	private Integer ordinalPosition;
	/**
	 * 默认值
	 * */
	private String columnDefault;
	/**
	 * 是否为空
	 * */
	private boolean isNullable;
	/**
	 * 数据类型
	 * */
	private String dataType;	
	/**
	 * 最大长度
	 * */
	private Long characterMaxmunLength;
	/**
	 * 字节长度
	 * */
	private Long characterOctetLength;
	/**
	 * 数值精度
	 * */
	private Integer  numericPrecision;
	/**
	 * 数值刻度
	 * */
	private Integer numericScale;
	/**
	 * 日期精度
	 * */
	private Integer datetimePrecision;
	/**
	 * 字符编码集名称
	 * */
	private String characterSetName;
	/**
	 * 排序规则名称
	 * */
	private String collationName;
	/**
	 * 列类型（数据类型+长度/精度/刻度）
	 * */
	private String columnType;
	/**
	 * 键值
	 * 空,UNI,PRI,MUL
	 * */
	private String columnKey;
	/**
	 * 备注
	 * */
	private String comment;
	/**
	 * 其他
	 * **/
	private String extra;
	/**
	 * 值
	 * */
	private Object value;

	public OdsColumn parseColumnType() {
		Matcher mather=COLOUMN_TYPE_PATTERN.matcher(this.getColumnType());
		if(mather.find()) {
			String type=mather.group(1).toLowerCase();
			if("decimal".equals(type)||"float".equals(type)||"double".equals(type)) {
				this.setNumericPrecision(Integer.valueOf(mather.group(2)));
				this.setNumericScale(Integer.valueOf(mather.group(4)));
			}
			else
			{
				this.setCharacterMaxmunLength(Long.valueOf(mather.group(2)));
			}
		}
		
		return this;
	}
	
	
	public OdsColumn() {
		super();
	}
}
